package br.uvv.sao.rn;

import java.io.Serializable;

import org.primefaces.component.menu.Menu;

import br.uvv.sao.dao.LoginDAO;
import br.uvv.sao.domain.Aluno;
import br.uvv.sao.domain.Professor;
import br.uvv.sao.domain.Usuario;
import br.uvv.sao.util.Util;

public class LoginRN implements Serializable {
	
	private static final long serialVersionUID = 7534796750384613756L;
	
	private LoginDAO loginDAO;
	
	public LoginRN() {
		super();
		loginDAO = new LoginDAO();
	}

	public Usuario recuperarUsuario(Usuario usuarioInstance){
		Usuario usuario = new Usuario();
		if(usuarioInstance != null && usuarioInstance.getEmail() != null){
			usuario = loginDAO.findByAluno(usuarioInstance.getEmail());
			if(usuario != null){
				return usuario;
			}else{
				usuario = loginDAO.findByProfessor(usuarioInstance.getEmail());
				if(usuario != null){
					return usuario;
				}else{
					return null;
				}
			}
		}else{
			return null;
		}
	}
	
	public Usuario login(Usuario usuario){
		Usuario usuarioInstance = recuperarUsuario(usuario);
		if(usuarioInstance != null && usuarioInstance.getSenha() != null){
			if(!usuarioInstance.getSenha().equals(usuario.getSenha())){
				return null;
			}
		}
		return usuarioInstance;
	}
	
	public Aluno carregarAluno(Usuario usuarioInstance){
		return this.loginDAO.getAluno(usuarioInstance.getId());
	}
	
	public Professor carregarProfessor(Usuario usuarioInstance){
		return this.loginDAO.getProfessor(usuarioInstance.getId());
	}
	
	public String salvar(Usuario usuarioInstance){
		if(usuarioInstance instanceof Aluno){
			this.loginDAO.atualizar((Aluno) usuarioInstance);
		}else{
			this.loginDAO.atualizar((Professor) usuarioInstance);
		}
		return loginDAO.getMensagemRetorno();
	}
	
	public String recuperarSenha(Usuario usuario){
		Usuario usuarioInstance = loginDAO.findByEmail(usuario.getEmail());
		if(usuarioInstance != null && usuarioInstance.getId() != null){
			if(usuarioInstance.getEmail().equals(usuario.getEmail())){
				String novaSenha = Util.gerarSenha();
				System.out.println(novaSenha);
				usuarioInstance.setSenha(novaSenha);
				salvar(usuarioInstance);
				//Enviar email para o usuário com a nova senha
				return loginDAO.getMensagemRetorno();
			}else{
				return "ERRO: Usuário inválido.";
			}
		}else{
			return "ERRO: Usuário inválido.";  
		}
	}

	public Menu gerarMenuAluno() {
		return null;
	}

	public Menu gerarMenuProfessor() {
		// TODO Auto-generated method stub
		return null;
	}

	public Menu gerarMenuAdministrador() {
		// TODO Auto-generated method stub
		return null;
	}
}
